package jwcb.hire.admin.server.dictionary.service;


import jwcb.hire.admin.api.config.domain.dto.*;
import jwcb.hire.admin.server.dictionary.domain.dto.SysDictionaryDataDto;
import jwcb.hire.admin.server.dictionary.domain.dto.SysDictionaryTypeDto;
import jwcb.hire.common.domain.domain.vo.BasePageVO;

import java.util.List;
import java.util.Map;

public interface ISysDictionaryService {

    /**
     * 新增字典类型
     * @param dictionaryTypeWriteReqDTO 新增数据
     * @return 主键Id
     */
    Long addDictionaryType(DictionaryTypeWriteReqDTO dictionaryTypeWriteReqDTO);


    /**
     * 字典类型列表查询
     * @param dictionaryTypeListReqDto 查询信息
     * @return 查询结果
     */
    BasePageVO<SysDictionaryTypeDto> listType(DictionaryTypeListReqDto dictionaryTypeListReqDto);

    /**
     * 编辑字典类型
     * @param dictionaryTypeWriteReqDTO 编辑信息
     * @return 主键ID
     */
    Long editType(DictionaryTypeWriteReqDTO dictionaryTypeWriteReqDTO);


    /**
     * 新增字典数据
     * @param dictionaryDataAddReqDTO 新增字典数据DTO
     * @return Long
     */
    Long addData(DictionaryDataAddReqDTO dictionaryDataAddReqDTO);

    /**
     * 根据字典类型和值查询字典数据
     * @param dictionaryDataListReqDTO 查询信息
     * @return 查询结果
     */
    BasePageVO<SysDictionaryDataDto> getDirectoryDataList(DictionaryDataListReqDTO dictionaryDataListReqDTO);


    /**
     * 编辑字典数据
     * @param dictionaryDataEditReqDTO 编辑内容
     * @return 主键Id
     */
    Long editData(DictionaryDataEditReqDTO dictionaryDataEditReqDTO);

    /**
     * 获取某个字典类型下的所有字典数据
     * @param typeKey 字典类型键
     * @return 字典数据列表
     */
    List<SysDictionaryDataDto> selectDictDataByType(String typeKey);

    /**
     * 获取多个字典类型下的所有字典数据
     * @param typeKeys 字典类型键列表
     * @return 字典数据列表
     */
    Map<String, List<SysDictionaryDataDto>> selectDictDataByTypeKeys(List<String> typeKeys);

    /**
     * 根据dataKey获取字典数据
     * @param dataKey 字典数据键
     * @return 字典数据
     */
    SysDictionaryDataDto selectDictDataByDataKey(String dataKey);

    /**
     * 根据多个dataKey获取字典数据
     * @param dataKeys 字典数据键列表
     * @return 字典数据
     */
    List<SysDictionaryDataDto> selectDictDataByDataKeys(List<String> dataKeys);
}
